package lew.bing.exp.myFutures;

import java.util.concurrent.Executor;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * Created by 刘国兵 on 2018/10/1.
 */
public interface Future<T> extends java.util.concurrent.Future<T> {

    /**
     * 添加监听器
     * @param listener 监听器
     */
    void addListener(FutureListener<T> listener);

    /**
     * 异步执行的线程池
     * @return 异步执行的线程池
     */
    Executor getAsyncExecutor();

    /**
     *
     * @param consumer 结果执行的方法
     * @return 新的future
     */
    Future<Void> forEach(Consumer<T> consumer);

    <S> Future<S> map(Function<T,S> transfer);

    <S> Future<S> flatMap(Function<T,Future<S>> transfer);

}
